<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        function fun(a, b) {
            console.log("a=" + a);
            console.log("b=" + b);
            // alert(this.name);
        }
        // fun.call();
        // fun.apply();
        // fun();
        var obj = {
            name: "obj",
            sayname: function () {
                alert(this.name);
            }
        };

        /*
            call() 和 apply()
                -这两个方法都是函数对象的方法，需要通过函数调用
                -当对函数调用call() 和 apply()都会调用函数执行
                -调用call和apply()可以将一个对象指定为第一个参数
                    此时这个对象将会成为函数执行时的this
                -call()方法可以将实参在对象之后依次传递
                -apply()方法需要将实参封装到一个数组中统一传递
        */

        // fun.call(obj, 2, 3);
        fun.apply(obj, [2, 3]);

        var obj2 = { name: "obj2" };
        // fun.call(obj);
        obj.sayname.apply(obj2);
    </script>
</head>

<body>

</body>

</html>